package com.byxy.managerial.dao.impl;

import java.io.Serializable;
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;

import com.byxy.managerial.dao.UserDao;
import com.byxy.managerial.entity.User;

/**
 * 管理员dao接口实现类
 * @author muxiangling
 *
 */
@Repository
@SuppressWarnings("unchecked")
public class UserDaoImpl implements UserDao {
	/**
	 * 获取工厂方法
	 */
	@Resource
	private SessionFactory sessionFactory;
	/**
	 * 增加用户的方法
	 */
	@Override
	public void save(User e) {
		sessionFactory.getCurrentSession().save(e);
	}

	/**
	 * 删除用户的方法
	 */
	@Override
	public void delete(User e) {
		sessionFactory.getCurrentSession().delete(e);
	}

	/**
	 * 修改用户的方法
	 */
	@Override
	public void update(User e) {
		sessionFactory.getCurrentSession().clear();
		sessionFactory.getCurrentSession().update(e);
	}

	/**
	 * 查询所有用户的方法
	 */
	@Override
	public List<User> find() {
		String hql = "from " + User.class.getSimpleName();
		return sessionFactory.getCurrentSession().createQuery(hql).list();
	}


	/**
	 * 分页查询用户的方法
	 */
	@Override
	public List<User> find(int pos, int row) {
		String hql = "from " + User.class.getSimpleName();
		return sessionFactory.getCurrentSession().createQuery(hql).setFirstResult(pos).setMaxResults(row).list();
	}

	/**
	 * 根据id查询用户的方法
	 */
	@Override
	public User getByID(Serializable id) {
		return (User) sessionFactory.getCurrentSession().get(User.class, id);
	}
	
	/**
	 * 统计用户数量的方法
	 */
	@Override
	public long countAll() {
		String hql = "select count(u) from " + User.class.getSimpleName() + " u";
		return (long) sessionFactory.getCurrentSession().createQuery(hql).uniqueResult();
	}

	/**
	 * 根据username获取用户
	 */
	@Override
	public User getByName(String username) {
		String hql = "from " + User.class.getSimpleName() + " where username = ?";
		List<User> list = sessionFactory.getCurrentSession().createQuery(hql).setParameter(0, username).list();		
		if (list.size()!=0) {
			return list.get(0);
		}
		return null;
	}
	
	/**
	 * 模糊查询用户信息
	 */
	@Override
	public List<User> findDim(String likeVal) {
		// 原生sql语句
		String sql = "select * from m_department where concat(id,username) like '%" + likeVal
				+ "%'";
		// 执行原生sql语句方法,将绑定给addEntity(User.class)
		Query query = sessionFactory.getCurrentSession().createSQLQuery(sql).addEntity(User.class);
		return query.list();
	}

}
